﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;

namespace QldtSdh.BLL
{
    public partial class BizCoSoDaoTao
    {
        /// <summary>
        /// Lấy danh sách tất cả các cơ sở đào tạo
        /// </summary>
        /// <returns></returns>
        public static List<CoSoDaoTao> GetList()
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.CoSoDaoTaoDbSet.OrderBy(e => e.MaCoSoDaoTao).ToList();
            }
        }

        /// <summary>
        /// Lấy theo ID
        /// </summary>
        /// <param name="maCoSoDaoTao"></param>
        /// <returns></returns>
        public static CoSoDaoTao GetByID(string maCoSoDaoTaoGUID)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTaoGUID == maCoSoDaoTaoGUID).FirstOrDefault();
            }
        }

        /// <summary>
        /// Kiểm tra một cơ sở đào tạo có tồn tại hay không theo khóa ngầm
        /// </summary>
        /// <param name="maCoSoDaoTaoGUID"></param>
        /// <returns></returns>
        public static bool IsExistByGuidID(string maCoSoDaoTaoGUID)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTaoGUID == maCoSoDaoTaoGUID).FirstOrDefault() != null ? true : false;
            }
        }

        /// <summary>
        /// Kiểm tra Mã cơ sở đào tạo có tồn tại hay không
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsExistByCode(string maCoSoDaoTao)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTao == maCoSoDaoTao).FirstOrDefault() != null ? true : false;
            }
        }

        /// <summary>
        /// Kiểm tra tên cơ sở đào tạo có trùng hay không
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsExistByName(string tenCoSoDaoTao)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.CoSoDaoTaoDbSet.Where(e => e.TenCoSoDaoTao == tenCoSoDaoTao).FirstOrDefault() != null ? true : false;
            }
        }

        public static CODE_RESULT_RETURN Add(CoSoDaoTao obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                if (IsExistByCode(obj.MaCoSoDaoTao))
                    return CODE_RESULT_RETURN.MaTrung;
                if (IsExistByName(obj.TenCoSoDaoTao))
                    return CODE_RESULT_RETURN.TenTrung;
                obj.MaCoSoDaoTaoGUID = Guid.NewGuid().ToString();
                try
                {
                    db.CoSoDaoTaoDbSet.Add(obj);
                    db.SaveChanges();
                    NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                    BizNhatKyHoatDong.InitData<CoSoDaoTao>(nhatKy, null, obj.MaCoSoDaoTaoGUID, LOAIDOITUONG.CƠ_SỞ_ĐÀO_TẠO, LOAITHAOTAC.Thêm);
                    BizNhatKyHoatDong.Add(nhatKy, obj);
                    return CODE_RESULT_RETURN.ThanhCong;
                }
                catch
                {
                    return CODE_RESULT_RETURN.ThatBai;
                }
            }
        }

        public static CODE_RESULT_RETURN Update(CoSoDaoTao obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var coSoDaoTao = db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTaoGUID == obj.MaCoSoDaoTaoGUID).FirstOrDefault();
                if (coSoDaoTao != null)
                {
                    var ma = db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTao == obj.MaCoSoDaoTao && e.MaCoSoDaoTaoGUID != coSoDaoTao.MaCoSoDaoTaoGUID).FirstOrDefault();
                    if (ma != null)
                        return CODE_RESULT_RETURN.MaTrung;
                    var ten = db.CoSoDaoTaoDbSet.Where(e => e.TenCoSoDaoTao == obj.TenCoSoDaoTao && e.MaCoSoDaoTaoGUID != coSoDaoTao.MaCoSoDaoTaoGUID).FirstOrDefault();
                    if (ten != null)
                        return CODE_RESULT_RETURN.TenTrung;
                    NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                    BizNhatKyHoatDong.InitData(nhatKy, coSoDaoTao, coSoDaoTao.MaCoSoDaoTaoGUID, LOAIDOITUONG.CƠ_SỞ_ĐÀO_TẠO, LOAITHAOTAC.Chỉnh_sửa);
                    coSoDaoTao.MaCoSoDaoTao = obj.MaCoSoDaoTao;
                    coSoDaoTao.TenCoSoDaoTao = obj.TenCoSoDaoTao;
                    coSoDaoTao.GhiChu = obj.GhiChu;
                    db.SaveChanges();
                    BizNhatKyHoatDong.Add(nhatKy, coSoDaoTao);
                    return CODE_RESULT_RETURN.ThanhCong;
                }
                else
                {
                    throw new Exception("Đối tượng này không tồn tại");
                }
            }
        }

        public static CODE_RESULT_RETURN Delete(string maCoSoDaoTaoGUID)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var csdt = db.CoSoDaoTaoDbSet.Where(e => e.MaCoSoDaoTaoGUID == maCoSoDaoTaoGUID).FirstOrDefault();
                if (csdt != null)
                {
                    if (!(csdt.ListPhongHoc != null && csdt.ListPhongHoc.Count > 0) || (csdt.ListLopKhoaNganh != null && csdt.ListLopKhoaNganh.Count > 0))
                    {
                        db.CoSoDaoTaoDbSet.Remove(csdt);
                        db.SaveChanges();
                        NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                        BizNhatKyHoatDong.InitData<CoSoDaoTao>(nhatKy, csdt, csdt.MaCoSoDaoTaoGUID, LOAIDOITUONG.CƠ_SỞ_ĐÀO_TẠO, LOAITHAOTAC.Xóa);
                        BizNhatKyHoatDong.Add<CoSoDaoTao>(nhatKy, null);
                        return CODE_RESULT_RETURN.ThanhCong;
                    }
                    else
                        return CODE_RESULT_RETURN.ThatBai;
                }
                else
                {
                    return CODE_RESULT_RETURN.ThatBai;
                }
            }
        }
    }
    public class Temp
    {
        public string text { get; set; }
        public string value { get; set; }
    }
}
